@奈良山
2年前 提问
1个回答

常见的静态代码分析方法有哪些

上官雨宝
2年前

常见的静态代码分析方法有以下这些:

  • 词法分析:词法分析方法是将源文件处理为token流,然后将token流与程序缺陷结构进行匹配,以查找不安全的函数调用。该方法的优点是能够快速地发现软件中的不安全函数,检测效率较高。缺点是由于没有考虑源代码的语义,不能理解程序的运行行为,因此漏报率和误报率比较高。基于该方法的分析工具主要有ITS4、Checkmar、RATS等。

  • 数据流分析:数据流分析方法是通过确定程序某点上变量的定义和取值情况来分析潜在的安全缺陷,首先将代码构造为抽象语法树和程序控制流图等模型,然后通过代数方法计算变量的定义和使用,描述程序运行时的行为,进而根据相应规则发现程序中的安全漏洞。该方法的优点是分析能力比较强,适合于对内存访问越界、常数传播等问题进行分析检查。缺点是分析速度比较慢、检测效率比较低。基于该方法的分析工具主要有Coverity、Klocworw、JLint等。

  • 模型检验:模型检验方法是通过状态迁移系统来判断程序的安全性质,首先将软件构造为状态机或者有向图等抽象模型,并使用模态或时序逻辑公式等形式化方法来描述安全属性,然后对模型进行遍历检查,以验证软件是否满足这些安全属性。该方法的优点是对路径和状态的分析比较准确,缺点是处理开销较大,因为需要穷举所有的可能状态,特别是在数据密集度较大的情况下。基于该方法的分析工具主要有MOPS、SLAM、JavaPathFinder等。

  • 污点传播分析:污点传播分析方法是通过静态跟踪不可信的输入数据来发现安全漏洞,首先通过对不可信的输入数据进行标记,静态跟踪和分析程序运行过程中污点数据的传播路径,发现污点数据的不安全使用方式,进而分析出由于敏感数据(如字符串参数)被改写而引发的输入验证类漏洞,如SQL注入、XSS等漏洞。该方法主要适用于输入验证类漏洞的分析,典型的分析工具是Pixy,它是一种针对PHP 语言的污点传播分析工具,用于发掘PHP 应用中SQL注入、XSS等类型的安全漏洞,具有检测效率高、误报率低等优点。